package com.wanlian.common;

import java.math.BigDecimal;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Verification {


    //正则表达式
    public static boolean checkEmaile(String emaile) {
        /**
         *   ^匹配输入字符串的开始位置
         *   $结束的位置
         *   \转义字符 eg:\. 匹配一个. 字符  不是任意字符 ，转义之后让他失去原有的功能
         *   \t制表符
         *   \n换行符
         *   \\w匹配字符串  eg:\w不能匹配 因为转义了
         *   \w匹配包括字母数字下划线的任何单词字符
         *   \s包括空格制表符换行符
         *   *匹配前面的子表达式任意次
         *   .小数点可以匹配任意字符
         *   +表达式至少出现一次
         *   ?表达式0次或者1次
         *   {10}重复10次
         *   {1,3}至少1-3次
         *   {0,5}最多5次
         *   {0,}至少0次 不出现或者出现任意次都可以 可以用*号代替
         *   {1,}至少1次  一般用+来代替
         *   []自定义集合     eg:[abcd]  abcd集合里任意字符
         *   [^abc]取非 除abc以外的任意字符
         *   |  将两个匹配条件进行逻辑“或”（Or）运算
         *   [1-9] 1到9 省略123456789
         *    邮箱匹配 eg: ^[a-zA-Z_]{1,}[0-9]{0,}@(([a-zA-z0-9]-*){1,}\.){1,3}[a-zA-z\-]{1,}$
         *
         */
        String RULE_EMAIL = "^\\w+((-\\w+)|(\\.\\w+))*\\@[A-Za-z0-9]+((\\.|-)[A-Za-z0-9]+)*\\.[A-Za-z0-9]+$";
        //正则表达式的模式 编译正则表达式
        Pattern p = Pattern.compile(RULE_EMAIL);
        //正则表达式的匹配器
        Matcher m = p.matcher(emaile);
        //进行正则匹配\
        return m.matches();
    }


    /**
     * 19位卡号验证
     */
    public static boolean isCode(String str) {
        Pattern pattern = Pattern.compile("^-?[0-9]+");
        if (pattern.matcher(str).matches()) {
            //数字
            if (str.length() == 19) {
                return true;
            } else {
                return false;
            }
        } else {
            return false;
        }
    }

    /**
     * 18位卡密验证
     */
    public static boolean isPass(String str) {
        Pattern pattern = Pattern.compile("^-?[0-9]+");
        if (pattern.matcher(str).matches()) {
            //数字
            if (str.length() == 18) {
                return true;
            } else {
                return false;
            }
        } else {
            return false;
        }
    }


    /**
     * 验证字符串是否为纯数字
     */
    public static boolean isNum(String str) {

        Pattern pattern = Pattern.compile("^-?[0-9]+");
        if (pattern.matcher(str).matches()) {
            //数字
            return true;
        } else {
            //非数字
            return false;
        }
    }


    /**
     * 验证字符串是否为纯数字（带小数）
     */
    public static boolean isNumF(String str) {
        //带小数的
        Pattern pattern = Pattern.compile("^[-+]?[0-9]+(\\.[0-9]+)?$");

        if (pattern.matcher(str).matches()) {
            //数字
            return true;
        } else {
            //非数字
            return false;
        }
    }

    //四舍五入
    private float rounding(float num) {
        BigDecimal b = new BigDecimal(num);
        float re_num = b.setScale(2, BigDecimal.ROUND_HALF_UP).floatValue();
        return re_num;
    }

    /**
     * 验证是否为钱包地址
     * 0x开头
     * 40位16进制
     */
    public static boolean isIntAccount(String str) {
        if (str == null || str == "" || str.length() != 42) {
            return true;
        }
        if (!str.substring(0, 2).equals("0x")) {
            return true;
        }
        String regex="^[A-Fa-f0-9]{40}$";
        if (!str.substring(2).matches(regex)) {
            return true;
        }
        return false;
    }

    public static void main(String[] args) {
        String a="234";
        System.out.println();
        System.out.println(  Verification.isIntAccount(a));

    }

}
